/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gui;

import controlleur.ControllerGrille;
import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;
import jreversi.Config;
import jreversi.EtatCase;
import manager.EventManager;
import moteur.Plateau;

/**
 *
 * @author pouillypi
 */
public class Case extends JPanel
{

    private int xX = 0; //Coordonnée en X
    private int yY = 0; //Coordonnée en Y
    Pion p = null; //L'instance du pion
    private EtatCase etatCase = EtatCase.NJOUABLE; //Son etat (couleur de la case)

    public Case(int i, int j)
    {
        xX = i;
        yY = j;
    }

    /*
     *PaintComponent avec mise ou non des MouseListener
     */
    @Override
    public void paintComponent(Graphics g)
    {
        if (etatCase != EtatCase.PRENABLE)
        {
            ControllerGrille cg = new ControllerGrille();
            EventManager event = EventManager.getInstance();

            //Remove du Listener car la case risque de n'etre plus jouable
            removeMouseListener(event);

            //Si le coup est possible
            if (cg.coupPossible(xX, yY))
            {
                //et que le joueur actuel est un Humain
                if (Plateau.getInstance().isHumanPlayerTurn())
                {
                    //Alors j'ajoute les MouseListener
                    addMouseListener(event);
                    addMouseMotionListener(event);
                }
                //Permettra d'indiquez comment peindre le fond.
                setEtatCase(EtatCase.JOUABLE);
            }
            else
            {
                //Permet de coloriser la derniere case joué
                if (Plateau.getInstance().getLastXClick() == xX && Plateau.getInstance().getLastYClick() == yY)
                {
                    setEtatCase(EtatCase.LASTCOUP);
                }
                else
                {
                    //permettra d'indiquez comment peindre le fond.
                    setEtatCase(EtatCase.NJOUABLE);
                }
            }
        }
        //Paint le fond
        paintCarre(g);

        if (Plateau.getInstance().getTabPlateau()[xX][yY] != 'e')
        {
            p = new Pion(xX, yY, getWidth());
            p.paint(g);
        }
    }

    public void jouer()
    {
    }

    /*
     * Peint les carré verts
     */
    public void paintCarre(Graphics g)
    {
        int w_h = Math.min(getHeight(), getWidth());
        setSize(w_h, w_h);
        switch (etatCase)
        {
            case NJOUABLE:
                g.setColor(Config.COLOR_CASE);
                break;
            case JOUABLE:
                g.setColor(Config.COLOR_CASEJ);
                break;
            case LASTCOUP:
                g.setColor(Config.COLOR_CASELC);
                break;
            case PRENABLE:
                g.setColor(Config.COLOR_CASEP);
                break;
        }

        g.fillRect(0, 0, getWidth(), getHeight());
        g.setColor(Color.BLACK);
        g.drawRect(0, 0, getWidth() - 1, getHeight() - 1);

    }

    /**
     * Retourne la coordonnés X de la case dans la grille
     * <i>(min = 0, max = 8)</i>
    @return xX int 
     */
    public int getxX()
    {
        return xX;
    }

    /**
     * Retourne la coordonnés Y de la case dans la grille
     * <i>(min = 0, max = 8)</i>
    @return yY int 
     */
    public int getyY()
    {
        return yY;
    }

    /**
    Etat de la case actuelle (Rf La classe jreversi.EtatCase) 
     */
    public void setEtatCase(EtatCase etatCase)
    {
        this.etatCase = etatCase;
    }
}
